; void lista_obtener_primero(nodo_lista_t **l, nodo_lista_t **n);

%include "macros/nodo_lista_t.mac"

%define ptr_ptr_lista [ebp + 8]
%define ptr_ptr_nodo [ebp + 12]

global lista_obtener_primero

section .text

lista_obtener_primero:
	push ebp
	mov ebp, esp
	push esi
	push edi
	push ebx
	
	xor eax, eax
	
	; Verifico que el ptr_ptr_lista no sea NULL.
	mov edx, ptr_ptr_lista
	cmp edx, 0
	je fin
	; edx = el ptr_ptr_lista.
	
	; Verifico si era la lista vacia.
	mov esi, [edx]
	cmp esi, 0
	je fin
	; esi = ptr al primer nodo.
	
	mov edi, [esi + off_ptr_sig_nl] ; edi = ptr al segundo nodo.
	
	; Guardamos el ptr al primer nodo que vamos a devolver.
	mov ebx, ptr_ptr_nodo
	mov [ebx], esi
	mov dword [esi + off_ptr_sig_nl], 0 ; Limpio el puntero al sig del nodo que saco.
	
	; Restauramos la lista que ahora apunta al segundo nodo.
	mov [edx], edi
	
fin:
	pop ebx
	pop edi
	pop esi
	pop ebp
	ret
